This invention relates generally to increasing the performance of software.
Software developers would ideally like their software to execute as optimally as possible on any given platform. To do so, they may obtain information about how particular processors execute software code. For example, some processors include performance counters. The performance counters can be programmed to count a given type of event and/or to determine its duration. For example, the performance counter may be programmed to count cache misses. A number of other similar events may be counted as well.
However, the usefulness of this information may be somewhat limited, due to a lack of correlation with program execution progress. Therefore, software developers also look to other types of information to see how their code is running on a given system. Program execution sequences represent states or points in time in a program execution. The state structure can be in software, hardware, or a combination of the two. The state structure may or may not contain instruction pointer information. Examples of program execution sequences are software transactions or patterns or hardware-detected phases.
Thus, the software developer has disparate information at his or her disposal. The software developer may obtain information about performance counter events and may obtain information about program execution sequences. In general, these two sources of information are disparate in time in that they may not be linked to one another in any way. The information must be used separately and the combined effect of the data is effectively lost.
Thus, there is a need for ways to better use information to improve the performance of software code.